﻿using System;

namespace Simp.Model
{
	/// <summary>Represents an expression able to simplify itself.</summary>
	public interface ISimplifiableExpression : IExpression
	{
		/// <summary>Simplifies the expression and return a simplified version.</summary>
		/// <remarks>A simplification typically reduce the number of sub-functions.</remarks>
		/// <param name="simplificationMode"/>
		/// <param name="parameterList"/>
		/// <returns>Simplified expression or <c>null</c> if no simplification were possible.</returns>
		IExpression Simplify(SimplificationMode simplificationMode, params IExpression[] parameterList);
	}
}